import { loginByEmail, loginByUserInfo } from '@/api/user/login';
import JSEncrypt from 'jsencrypt';

import cookies from '@/utils/cookies.js';
// import { JSEncrypt } from 'jsencrypt'
const private_key = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4PvGb6bHyFSfMhBeHmyOGPrky
lk8u+MnasnEcxb9dO4UG6bSHzofsVrQTSnrzFrMIzpZZI/+gA8hJr1RyilqnhmvI
r6vnJ4IrOlzukpW5B2BNnkNfp71NTtviZOtvTfb/2z2TwKKcJZhinO76XqKdLIee
dQvegcMgr6doLmpX1QIDAQAB
-----END PUBLIC KEY-----`;

export default {
  namespaced: true,
  actions: {
    /**
     * @description 登录
     * @param {Object} param vm {Object} vue 实例
     * @param {Object} param username {String} 用户账号
     * @param {Object} param password {String} 密码
     * @param {Object} param route {Object} 登录成功后定向的路由对象
     */
    LoginByUser({ commit }, { userName, userPass, vm, router }) {
      let params = {
        username: userName.trim(),
        password: userPass.trim()
      };
      var encrypt = new JSEncrypt();
      encrypt.setPublicKey(private_key);
      var data = encrypt.encrypt(JSON.stringify(params));

      return new Promise((resolve, reject) => {
        loginByUserInfo({
          content: data
        })
          .then(response => {
            console.log(response);
 
            if (response.respCode !== 0) {
              // 登录失败处理
              reject(response);
              return;
            }
            let result = response.result;
            const userInfo = result.user;
            // const getmenu = result.itemKeys;
            // if (!getmenu) {
            //   reject({
            //     respCode: 12
            //   });
            //   return;
            // }
            // let buildMenu = util.buildMenu(getmenu);

            commit('base/user/s_token', result.token, {
              root: true
            });
            commit('base/user/s_user', userInfo, {
              root: true
            });
            // // 保存当前的 菜单权限
            // commit('set_menuitemkeys', result.itemKeys);
            // commit('SET_MENU', buildMenu.value);
            // commit('SET_FIRSTMENUKEYS', buildMenu.keys);

            resolve(userInfo);
          })
          .catch(error => {
            reject(error);
          });
      });
    },

    login(
      { dispatch, commit },
      {
        vm,
        name,
        pwd,
        route = {
          name: 'index'
        }
      }
    ) {
      // 开始请求登录接口
      loginByEmail({
        username: name,
        password: pwd
      })
        .then(async res => {
          // 设置 cookie 一定要存 uuid 和 token 两个 cookie
          // 整个系统依赖这两个数据进行校验和存储
          // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复
          // token 代表用户当前登录状态 建议在网络请求中携带 token
          // 如有必要 token 需要定时更新，默认保存一天
          // if (res.respCode !== '0') {
          //   reject('xx');
          //   return;
          // }
          let result = res;
          let token = res.data;
          cookies.set('token', token);
          commit('base/user/s_token', token, {
            root: true
          });

          // 设置 vuex 用户信息
          await dispatch('base/user/load', {}, { root: true });
        })
        .catch(err => {
          console.log('err: ', err);
        });
    }
  }
};
